---
title: FileButton
description: "`FileButton`は、ユーザーがファイルを選択するために使用されるボタンのコンポーネントです。"
storybook: components-filebutton--basic
source: components/file-button
style: components/file-button/file-button.style.ts
---

```tsx preview
<Wrap gap="md">
  <FileButton>Upload</FileButton>

  <FileButton
    as={IconButton}
    aria-label="Upload file"
    icon={<PlusIcon fontSize="2xl" />}
  />
</Wrap>
```

## 使い方

:::code-group

```tsx [package]
import { FileButton } from "@yamada-ui/react"
```

```tsx [alias]
import { FileButton } from "@/components/ui"
```

```tsx [monorepo]
import { FileButton } from "@workspaces/ui"
```

:::

```tsx
<FileButton />
```

### バリアントを変更する

```tsx preview
<Wrap gap="md">
  <For each={["solid", "subtle", "surface", "outline", "ghost"]}>
    {(variant, index) => (
      <FileButton variant={variant} key={index}>
        {toTitleCase(variant)}
      </FileButton>
    )}
  </For>
</Wrap>
```

### サイズを変更する

```tsx preview
<Wrap gap="md">
  <For each={["xs", "sm", "md", "lg", "xl"]}>
    {(size, index) => (
      <FileButton size={size} key={index} minW="24">
        {toTitleCase(size)}
      </FileButton>
    )}
  </For>
</Wrap>
```

### カラースキームを変更する

```tsx preview
<Wrap gap="md">
  <For each={["success", "warning"]}>
    {(colorScheme, index) => (
      <FileButton colorScheme={colorScheme} key={index}>
        {toTitleCase(colorScheme)}
      </FileButton>
    )}
  </For>
</Wrap>
```

### 複数選択を許容する

複数選択を許容する場合は、`multiple`を`true`に設定します。

```tsx preview
<FileButton multiple>Upload</FileButton>
```

### 拡張子を指定する

拡張子を指定する場合は、`accept`に文字列(タイプ)を設定します。

```tsx preview
<FileButton accept="image/png,image/jpeg">Upload</FileButton>
```

### 無効にする

無効にする場合は、`disabled`を`true`に設定します。

```tsx preview
<VStack>
  <FileButton disabled alignSelf="flex-start">
    Upload
  </FileButton>

  <Field.Root
    disabled
    helperMessage="Please select a file to upload."
    label="Upload file"
  >
    <FileButton justifySelf="flex-start">Upload</FileButton>
  </Field.Root>
</VStack>
```

### 読み取り専用にする

読み取り専用にする場合は、`readOnly`を`true`に設定します。

```tsx preview
<VStack>
  <FileButton readOnly alignSelf="flex-start">
    Upload
  </FileButton>

  <Field.Root
    readOnly
    helperMessage="Please select a file to upload."
    label="Upload file"
  >
    <FileButton justifySelf="flex-start">Upload</FileButton>
  </Field.Root>
</VStack>
```

### 無効な入力にする

無効な入力にする場合は、`invalid`を`true`に設定します。

```tsx preview
<VStack>
  <FileButton invalid alignSelf="flex-start">
    Upload
  </FileButton>

  <Field.Root
    invalid
    helperMessage="Please select a file to upload."
    label="Upload file"
  >
    <FileButton justifySelf="flex-start">Upload</FileButton>
  </Field.Root>
</VStack>
```

ボーダーの色を変更する場合は、`errorBorderColor`に値を設定します。

```tsx preview
<FileButton invalid errorBorderColor="warning">
  Upload
</FileButton>
```

### リセットする

値をリセットする場合は、`resetRef`に`ref`を設定します。設定された`ref`にコールバック関数が付与されるので、それを実行します。

```tsx preview functional client
const [files, onChange] = useState<File[] | undefined>(undefined)
const resetRef = useRef<() => void>(null)
const onReset = () => {
  onChange(undefined)
  resetRef.current?.()
}

return (
  <VStack>
    <Text>files: {files?.length ?? 0}</Text>

    <HStack>
      <FileButton multiple resetRef={resetRef} onChange={onChange}>
        Upload
      </FileButton>

      <Button onClick={onReset} variant="subtle">
        Reset
      </Button>
    </HStack>
  </VStack>
)
```

## Props

<PropsTable name="file-button" />

## アクセシビリティ

現在、v2の移行に伴い、このセクションは更新中です。
